package com.vdongchina.miniapp.service;

import com.vdongchina.miniapp.commons.MiniAppException;
import com.vdongchina.miniapp.http.dto.*;

import java.util.List;
import java.util.Map;

/**
 * Copyright (C)
 * FileName: MiniAppService
 * Author:   maokai
 * Date:     2021/8/12 14:46
 * Description:
 */
public interface IAppUserService {

    /**
     * 解析用户信息
     *
     * @param code login 接口返回的登录凭证
     *             anonymousCode login 接口返回的匿名登录凭证
     */
    JsCodeResp jscode2session(String code, String anonymousCode) throws MiniAppException;

    /**
     * 获取token
     */
    String getAccessToken(String appId) throws MiniAppException;


    /**
     * 以 key-value 形式存储用户数据到小程序平台的云存储服务。
     * 若开发者无内部存储服务则可接入，免费且无需申请。
     * 一般情况下只存储用户的基本信息，禁止写入大量不相干信息。
     *
     * @param access_token
     * @param openid
     * @param signature
     * @param sig_method
     * @param body
     */
    boolean setUserStorage(String access_token, String openid, List<Map<String, Object>> body) throws MiniAppException;

    /**
     * 删除存储到字节跳动的云存储服务的 key-value 数据。
     * 当开发者不需要该用户信息时，需要删除，以免占用过大的存储空间。
     *
     * @param access_token
     * @param openid
     * @param signature
     * @param sig_method
     * @param body
     */

    boolean removeUserStorage(String access_token, String openid,  List<String> body) throws MiniAppException;

    /**
     * 获取小程序/小游戏的二维码。该二维码可通过任意 app 扫码打开，
     * 能跳转到开发者指定的对应字节系 app 内拉起小程序/小游戏，
     * 并传入开发者指定的参数。通过该接口生成的二维码，永久有效，暂无数量限制。
     *
     * @param request
     */

    byte[] qrcode(QrcodeRequest request) throws MiniAppException;

    /**
     * 内容安全检测
     *
     * @param accessToken
     * @param body
     */

    List<AntidirtResp.DataResult> antidirt(String accessToken, AntidirtRequest body) throws MiniAppException;

    /**
     * 图片检测 V2
     *
     * @param body
     */

    List<ImageResp.Predicts>  censorImage(CensorImageRequest body) throws MiniAppException;

    /**
     * 订阅消息推送
     *
     * @param body
     */

    boolean subscribeNotification(SubscribeNotifyRequest body) throws MiniAppException;
}
